#include <bits/stdc++.h>
#define LL long long
using namespace std;

int a, b, c, d;
const int N = 4e6+5;
const int mod = 998244353;
LL f[N],g[N];

// 快速幂
LL qpow(LL a, LL b){
    LL res = 1;
    while(b){
        if(b&1) res = (a * res ) % mod;			// 如果b是奇数
        a = ( a * a ) % mod;
        b >>= 1;
    }
    return res;
}

// 初始化
void init(){
    f[0] = g[0] = 1;
    for(int i = 1; i< N; i++){
        f[i] = (f[i-1]*i) % mod;
        g[i] = g[i-1] *qpow(i,mod-2) % mod;  // 费马小定理求逆元
    }
}

LL C(LL a, LL b){
    if(a<0||b<0)return 0;
	if(b>a)return 0;
    return ((f[a] * g[b] )%mod * g[a - b]) %mod;
}


void solve2(){
    init();
    cin >> a >> b >> c >> d;
    int n = a + b + c + d;
    long long ans = 0;
    // print();
    // 遍历第一个葡萄出现的位置
    for(int i = a+ b + 1; i <= a+b+c+1; i++){
        // 计算第一个葡萄前面有多少个香蕉
        int x = i - 1 - a - b;
        // 前面i-1个位置只要决定了orange的位置就可以全部决定（苹果在香蕉左边）
        ans = (ans + (C(i-1,b) * C(n - i,c - x))%mod)%mod;
    }
    cout << ans;

}

int main()
{
    solve2();
   return 0;
}
